/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.istia.gesstages.dao.db;

import fr.istia.gesstages.dao.IDaoUserType;
import fr.istia.gesstages.exception.PortailException;
import fr.istia.gesstages.jpa.UserType;
import java.util.List;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.transaction.annotation.Transactional;

/**
 * @date 22/11/2011
 * @author Cédric Moreau
 */
@Transactional
public class DaoUserTypeDB implements IDaoUserType {

    @PersistenceContext
    private EntityManager em;

    public UserType create(UserType type) {
        try {
            em.persist(type);
            return type;
        } catch (Exception e) {
            throw new PortailException("Erreur lors de la création du type d'utilisateur", e);
        }
    }

    public UserType update(UserType type) {
        try {
            return em.merge(type);
        } catch (Exception e) {
            throw new UnsupportedOperationException(" Erreur lors de la modification");
        }
    }

    public void delete(UserType type) {
        try {
            em.remove(em.merge(type));
        } catch (Exception e) {
            throw new UnsupportedOperationException(" Erreur lors de la suppression");
        }
    }

    public UserType find(int id) {
        try {
            return em.find(UserType.class, id);
        } catch (Exception e) {
            throw new PortailException("Erreur lors de la récupération du type d'utilisateur n°" + id, e);
        }
    }

    public UserType findByName(String name) {
        try {
            return (UserType) em.createQuery("SELECT t FROM UserType t WHERE t.libelle = :libelle").setParameter("libelle", name).getSingleResult();
        } catch (Exception e) {
            throw new PortailException("Erreur lors de la récupération des types d'utilisateur", e);
        }
    }

    public List<UserType> findAll() {
        try {
            return em.createQuery("SELECT t FROM UserType t").getResultList();
        } catch (Exception e) {
            throw new PortailException("Erreur lors de la récupération des types d'utilisateur", e);
        }
    }

    public void deleteAll() {
        try {
            em.createQuery("DELETE FROM UserType u").executeUpdate();
        } catch (Exception e) {
            throw new PortailException("Erreur lors de la suppression de tous les types d'utilisateurs");
        }
    }

    public void close() {
    }
}
